﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//乌龟与兔子进行赛跑，跑场是一个矩型跑道，跑道边可以随地进行休息。乌龟每分钟可以前进3米，兔子每分钟前进9米；
//兔子嫌乌龟跑得慢，觉得肯定能跑赢乌龟，于是，每跑10分钟回头看一下乌龟，若发现自己超过乌龟，就在路边休息，
//每次休息30分钟，否则继续跑10分钟；而乌龟非常努力，一直跑，不休息。
//假定乌龟与兔子在同一起点同一时刻开始起跑，请问T分钟后乌龟和兔子谁跑得快？

//int main()
//{
//	int tx = 0;
//	int rx = 0;
//	int time = 0;
//	int T = 0;
//	scanf("%d", &T);
//	while (1)
//	{
//		if (time % 10 == 0 && rx > tx && time != 0)
//		{
//			int x = 30;
//			while (x)
//			{
//				tx += 3;
//				time++;
//				if (time == T)
//				{
//					goto aa;
//				}
//				x--;
//			}
//		}
//		else
//		{
//			time++;
//			tx += 3;
//			rx += 9;
//			if (time == T)
//			{
//				goto aa;
//			}
//		}
//	}
//	aa:
//		if (rx > tx)
//		{
//			printf("^_^ %d", rx);
//		}
//		else if (rx < tx)
//		{
//			printf("@_@ %d", tx);
//
//		}
//		else
//		{
//			printf("-_-");
//		}
//	
//	return 0;
//}






//输入一个整数（位数不超过9位）代表一个人民币值（单位为元），请转换成财务要求的大写中文格式。
//如23108元，转换后变成“贰万叁仟壹百零捌”元。为了简化输出，用小写英文字母a-j顺序代表大写数字0-9，
//用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

//入格式：
//输入在一行中给出一个不超过9位的非负整数。

//输出格式：
//在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯
//int main()
//{
//	char string[20] = "0Y0Q0B0S0W0Q0B0S0";
//	int x = 0;
//	int m = 0;
//	scanf("%d", &x);
//	int j = 16;
//	if (x == 0)
//	{
//		printf("a");
//	}
//	else
//	{
//		while (x)
//		{
//			int i = x % 10;
//			switch (i)
//			{
//			case 0:
//				string[j] = 'a';
//				break;
//			case 1:
//				string[j] = 'b';
//				break;
//			case 2:
//				string[j] = 'c';
//				break;
//			case 3:
//				string[j] = 'd';
//				break;
//			case 4:
//				string[j] = 'e';
//				break;
//			case 5:
//				string[j] = 'f';
//				break;
//			case 6:
//				string[j] = 'g';
//				break;
//			case 7:
//				string[j] = 'h';
//				break;
//			case 8:
//				string[j] = 'i';
//				break;
//			case 9:
//				string[j] = 'j';
//				break;
//			}
//			j -= 2;
//			x /= 10;
//		}
//		int k = 0;
//		for (k = 0; k <= 16; k += 2)
//		{
//			if (string[k] != '0')
//			{
//				break;
//			}
//		}
//		char str[20] = { '\0' };
//		m = 0;
//		for (k; k <= 16; k++)
//		{
//			if (string[k] == 'a')
//			{
//				str[m] = string[k];
//				m++;
//				//printf("%c", string[k]);
//				k++;
//
//			}
//			else
//			{
//				str[m] = string[k];
//				m++;
//				//printf("%d", string[k]);
//			}
//		}
//		if (str[m-1] == 'a')
//		{
//			for (int i = m-1; str[i] == 'a'; i--)
//			{
//				str[i] = '\0';
//			}
//		}
//		if(str[m-1]!='a')
//		{
//			for (int i = 0; i < m; i++)
//			{
//				if (str[i] == 'a')
//				{
//					if (str[i + 1] == 'a')
//					{
//						str[i]='\0';
//					}
//				}
//			}
//		}
//		for (int i = 0; i < m; i++)
//		{
//			if (str[i] != '\0')
//			{
//				printf("%c", str[i]);
//			}
//		}
//
//	}
//		return 0;
//}




//分数可以表示为分子/分母的形式。编写一个程序，要求用户输入一个分数，然后将其约分为最简分式。
//最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时，
//不需要表达为整数又分数的形式，即11/8还是11/8；而当分子分母相等时，仍然表达为1/1的分数形式。
//int main()
//{
//	int x = 0;
//	int y = 0;
//	scanf("%d/%d", &x, &y);
//	if (x == y)
//	{
//		printf("1/1\n");
//	}
//	else
//	{
//		int n = x > y ? y : x;
//		int flag = 1;
//		while (1)
//		{
//			if (flag == 0)
//			{
//				break;
//			}
//			for (int i = 2; i <= n; i++)
//			{
//				if (x % i == 0 && y % i == 0)
//				{
//					x /= i;
//					y /= i;
//					break;
//				}
//				if (i == n)
//				{
//					flag = 0;
//				}
//			}
//		}
//		printf("%d/%d", x, y);
//	}
//	return 0;
//}






//输入一个整数，输出每个数字对应的拼音。当整数为负数时，先输出fu字。十个数字对应的拼音如下：

//0: ling
//1 : yi
//2 : er
//3 : san
//4 : si
//5 : wu
//6 : liu
//7 : qi
//8 : ba
//9 : jiu
//输入格式：
//输入在一行中给出一个整数，如：1234。

//提示：整数包括负数、零和正数。

//输出格式：
//在一行中输出这个整数对应的拼音，每个数字的拼音之间用空格分开，行末没有最后的空格。如
//yi er san si。
//int main()
//{
//	int mum = 0;
//	scanf("%d", &mum);
//	if (mum == 0)
//	{
//		printf("ling");
//	}
//	else
//	{
//		int arr[50] = { 0 };
//		int i = 0;
//		if (mum < 0)
//		{
//			printf("fu ");
//			mum = -mum;
//		}
//		while (mum)
//		{
//			arr[i] = mum % 10;
//			mum /= 10;
//			i++;
//		}
//		i--;
//		for (i; i >= 0; i--)
//		{
//
//			if (i == 0)
//			{
//				switch (arr[i])
//				{
//				case 0:
//					printf("ling");
//					break;
//				case 1:
//					printf("yi");
//					break;
//				case 2:
//					printf("er");
//					break;
//				case 3:
//					printf("san");
//					break;
//				case 4:
//					printf("si");
//					break;
//				case 5:
//					printf("wu");
//					break;
//				case 6:
//					printf("liu");
//					break;
//				case 7:
//					printf("qi");
//					break;
//				case 8:
//					printf("ba");
//					break;
//				case 9:
//					printf("jiu");
//					break;
//				}
//			}
//			else
//			{
//				switch (arr[i])
//				{
//				case 0:
//					printf("ling ");
//					break;
//				case 1:
//					printf("yi ");
//					break;
//				case 2:
//					printf("er ");
//					break;
//				case 3:
//					printf("san ");
//					break;
//				case 4:
//					printf("si ");
//					break;
//				case 5:
//					printf("wu ");
//					break;
//				case 6:
//					printf("liu ");
//					break;
//				case 7:
//					printf("qi ");
//					break;
//				case 8:
//					printf("ba ");
//					break;
//				case 9:
//					printf("jiu ");
//					break;
//				}
//			}
//		}
//	}
//	return 0;
//}




//你的程序要读入一行文本，其中以空格分隔为若干个单词，以.结束。你要输出每个单词的长度。这里的单词与语言无关，
//可以包括各种符号，比如it's算一个单词，长度为4。注意，行中可能出现连续的空格；最后的.不计算在内。
//int main()
//{
//	char c = 0;
//	int m = 0;
//	int flag = -1;
//	int arr[50] = { 0 };
//	int i = 0;
//	while (1)
//	{
//		scanf("%c", &c);
//
//		if (c != ' ' && c != '.')
//		{
//			flag = 0;
//			m++;
//		}
//		if (c == ' '&&flag==0)
//		{
//			flag = 1;
//			arr[i] = m;
//			i++;
//			//printf("%d ", m);
//			m = 0;
//		}
//		if (c == '.'&&flag==0)
//		{
//			arr[i] = m;
//			i++;
//			//printf("%d", m);
//			
//		}
//		if (c == '.')
//		{
//			
//			break;
//		}
//		
//	}
//	for (int j = 0; j < i; j++)
//	{
//		if (j == i - 1)
//		{
//			printf("%d", arr[j]);
//
//		}
//		else
//		{
//			printf("%d ", arr[j]);
//
//		}
//	}
//	return 0;
//}






//将N个整数按从小到大排序的冒泡排序法是这样工作的：从头到尾比较相邻两个元素，如果前面的元素大于其紧随的后面元素，
//则交换它们。通过一遍扫描，则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。
//依此类推，最后只需处理两个元素，就完成了对N个数的排序。

//本题要求对任意给定的K（ < N），输出扫描完第K遍后的中间结果数列。
//int main()
//{
//	int N = 0;
//	int K = 0;
//	scanf("%d%d", &N, &K);
//	int arr[100] = { 0 };
//	int k = 0;
//	while (k!=N)
//	{
//		scanf("%d", &arr[k]);
//		k++;
//	}
//	for (int i = 0; i < K; i++)
//	{
//		for (int j = 0; j < N - 1 - i; j++)
//		{
//			if (arr[j] > arr[j+1])
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j+1];
//				arr[j+1] = tmp;
//			}
//		}
//	}
//	for (int i = 0; i < N; i++)
//	{
//		if (i != N - 1)
//		{
//			printf("%d ", arr[i]);
//		}
//		else
//		{
//			printf("%d", arr[i]);
//		}
//	}
//}




//一群猴子要选新猴王。新猴王的选择方法是：让N只候选猴子围成一圈，从某位置起顺序编号为1~N号。
//从第1号开始报数，每轮从1报到3，凡报到3的猴子即退出圈子，接着又从紧邻的下一只猴子开始同样的报数。
//如此不断循环，最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王？
//
//输入格式：
//输入在一行中给一个正整数N（≤1000）。
//
//输出格式：
//在一行中输出当选猴王的编号。
//int main()
//{
//	int arr[1001] = { -1 };
//	int tmp[1001] = { -1 };
//	int N = 0;
//	scanf("%d",&N);
//	int sum = N;
//	for (int i = 1; i <= N; i++)
//	{
//		arr[i] = i;
//	}
//	while (sum==1)
//	{
//		for (int i = 1; i <= N; i++)
//		{
//			if (arr[i] % 3 == 0)
//			{
//				sum--;
//				arr[i] = 0;
//			}
//		}
//		int j = 1;
//		for (int i = 1; i <= N; i++)
//		{
//			if (arr[i] != 0)
//			{
//				tmp[j] = arr[i];
//				j++;
//			}
//		}
//		for (int i = 1; i <= sum; i++)
//		{
//			arr[i] = tmp[i];
//		}
//		
//	}
//	printf("%d", arr[1]);
//	return 0;
//}





//输入2个字符串S1和S2，要求删除字符串S1中出现的所有子串S2，即结果字符串中不能包含S2。

/*输入格式：
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串，对应S1和S2。

输出格式：
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。*/
//#include<string.h>
//int main()
//{
//	char s1[80] = { 0 };
//	char s2[80] = { 0 };
//	gets_s(s1);
//	gets_s(s2);
//	
//	
//		for (int i = 0; s1[i] != '\0'; i++)
//		{
//			int j = 0;
//			if (s1[i] == s2[j])
//			{
//				int m = i;
//				for (j; s2[j] != '\0'; j++, m++)
//				{
//					if (s2[j] != s1[m])
//					{
//						break;
//					}
//				}
//			}
//			if (s2[j] != '\0')
//			{
//				continue;
//			}
//			else
//			{
//				
//				int len = strlen(s2);
//				int k = i + len + 1;
//				for (k; s1[k] != '\0'; k++)
//				{
//					s1[k - len - 1] = s1[k];
//				}
//
//				s1[k - len - 1] = '\0';
//			}
//		}
//	
//
//	printf("%s", s1);
//	return 0;
//}




//本题要求编写程序，计算两个有理数的和。

//输入格式：
//输入在一行中按照a1 / b1 a2 / b2的格式给出两个分数形式的有理数，其中分子和分母全是整形范围内的正整数。

//输出格式：
//在一行中按照a / b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式，若分母为1，则只输出分子。
int main()
{
	int x1 = 0;
	int y1 = 0;
	int x2 = 0;
	int y2 = 0;
	scanf("%d/%d %d/%d", &x1, &y1, &x2, &y2);
	if (y1 == y2)
	{
		x1 = x1 + x2;
		int min = x1 > y1 ? y1 : x1;
		while (1)
		{
			int i = 2;
			for (i=2; i <= min; i++)
			{
				if (x1 % i == 0 && y1 % i == 0)
				{
					x1 /= i;
					y1 /= i;
					break;
				}
			}
			if (i == min+1)
			{
				break;
			}
		}
		if (y1 == 1)
		{
			printf("%d",x1);
		}
		else
		{
			printf("%d/%d", x1, y1);
		}
		
	}
	else
	{
		x1 = x1 * y2 + x2 * y1;
		y1 = y1 * y2;
		int min = x1 > y1 ? y1 : x1;
		while (1)
		{
			int i = 2;
			for (i = 2; i <= min; i++)
			{
				if (x1 % i == 0 && y1 % i == 0)
				{
					x1 /= i;
					y1 /= i;
					break;
				}
			}
			if (i == min+1)
			{
				break;
			}
		}
		if (y1 == 1)
		{
			printf("%d\n", x1);
		}
		else
		{
			printf("%d/%d", x1, y1);
		}

	}
}